<?php

namespace App\Service;

use GuzzleHttp\Client;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
use Hyperf\Di\Annotation\Inject;

class RugbyReviewService
{
    /**
     * @Inject
     * @var ValidatorFactoryInterface
     */
    protected $validatorFactory;

    protected $apiKey = 'sk-adab94d73dc147859c5dd6b891fab1f9';

    public function generateReview(array $data): array
    {

        $client = new Client([
            'base_uri' => 'https://api.deepseek.com',
            'headers' => [
                'Authorization' => 'Bearer ' . $this->apiKey,
                'Content-Type' => 'application/json'
            ],
            'verify' => false,
            'timeout' => 80,
            'connect_timeout' => 10,
            'http_errors' => false
        ]);

        try {
            $response = $client->post('/chat/completions', [
                'json' => [
                    'model' => 'deepseek-chat',
                    'messages' => [
                        ['role' => 'system', 'content' => 'You are an expert SEO content writer.'],
                        ['role' => 'user', 'content' => $this->rugbyPrompt($data)]
                    ],
                    'stream' => false,
                    'max_tokens' => 3000
                ],
                'timeout' => 80
            ]);


            $result = json_decode($response->getBody()->getContents(), true);

            if (!isset($result['choices'][0]['message']['content'])) {
                throw new \RuntimeException('API返回结构无效');
            }

            $rawContent = $result['choices'][0]['message']['content'];
            $cleanedContent = preg_replace('/^```json|```$/m', '', $rawContent);
            $contentData = json_decode(trim($cleanedContent), true);

            return $contentData;
        } catch (\Exception $e) {
            throw new \RuntimeException('API请求失败: '.$e->getMessage());
        }
    }

    private function rugbyPrompt(array $data): string
    {
        return <<<PROMPT
            你是一个模拟商品评论生成器，请根据以下要求，生成一批真实感极强的买家评论数据。
            
            # 背景设定
            用户是在 Google 上搜索后进入 irugbystore.com 网站，并购买了该商品，写下评论。
            请根据商品的语言字段 `language` 分别输出英文或法文内容。

            # 评论要求
            - 每个商品生成 2~7 条评论（数量你决定，但必须在这个范围内）
            - 评论作者请使用符合欧美地区风格的真实人名（如：Emily Johnson、Liam Smith、Chloé Dubois、Julien Lefevre）
            - 评论内容必须围绕产品本身展开，包括但不限于：
              - 商品质量
              - 舒适度或合身感
              - 外观、设计风格
              - 购买场景或用途（如：为比赛日购买、送人、收藏等）
              - 购买来源（如：通过 Google 搜索到网站，亲朋好友的推荐等）
            - 每条评论内容不要重复，要模拟真实买家多样化口吻
            - 长度保持在 1~3 句话之间，真实自然，避免 AI 痕迹
            - 不要加入 HTML，只返回纯文本内容

            # 商品信息
            product_id: {$data['product_id']}
            language: {$data['language']} （仅用来确定评论语言）
            language_id: {$data['language_id']}
            product_name: {$data['product_name']}
            product_description: {$data['product_description']}

            # 输出格式（严格返回以下格式的 JSON 数组）：
            [
              {
                "product_id": 167,
                "language_id": 1,
                "author": "John Smith",
                "text": "This jersey fits perfectly and feels amazing. I found it on Google and loved the mental health tribute design!"
              },
              {
                "product_id": 167,
                "language_id": 1,
                "author": "Emma Thompson",
                "text": "Great value for fans! I bought this after seeing it online and it's now my favorite matchday outfit."
              },
              ...
            ]

        PROMPT;
    }
}
